home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
FM Towns: Free Software Collection 11
/
FM Towns Free Software Collection 11.iso
/
t_os
/
shell
/
digital
/
src
/
digital.c
next >
Wrap
Text File
|
1995-06-08
|
4KB
|
195 lines
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <winb.h>
#include <te.h>
#include <fntb.h>
#include <gui.h>
#include <egb.h>
#include <guidbg.h>
#include <time.h>
#include <kh.h>
#include <dlib.h>
char *guiEgbPtr ; /* EGB のワークアドレス */
int dialogID = -1 ;
int numberIconID[5] = -1 ;
int quitIconID = -1 ;
int quitFuncRet = ILLEGAL_FUNCTION ;
int userFunc(apliId, messId, info, data)
int apliId;
int messId;
int info;
int data;
{
register int ret;
ret = ILLEGAL_FUNCTION;
switch(messId)
{
case GM_QUIT :
MMI_SendMessage(quitIconID,MM_EXEC,2,0,0);
ret = quitFuncRet ;
break;
}
return(ret);
}
void main()
{
static MMICTRL mmi ={
SCREEN16|SCREENIGNORE, // ページ0側解像度
SCREENUNUSED, // ページ1側解像度
0, // 書き込みページ
SCREENAVAILABLE, // 表示ページ
0, // 表示プライオリティ
SCREENAVAILABLE, // 色数
SCREENEXPAND, // VRAMの横の長さ
0, // メモリ領域の大きさ
NULL, // メモリ領域のアドレス
0, // ユーザ領域の大きさ
NULL, // ユーザ領域のアドレス
0, 0, // 画面枠 lupx,lupy
0, 0, // rdwx,rdwy
-16384, -16384, // 移動枠 lupx,lupy
16383, 16383, // rdwx,rdwy
15, // 白色
8, // 黒色
7, // 灰色
6 // 反転色
};
extern int APL_init() ;
/* 初期化処理 */
if (MMI_Open( &mmi ) == NOERR)
{
/* 初期化に成功すればメインループに入る. */
if (APL_init() == NOERR)
{
MMI_ExecSystem() ;
ICNTerm();
}
}
/* 終了処理 */
MMI_Close() ;
}
int APL_init()
{
extern MMIINIT initDataGUI ;
register int ret ;
/* EGB ワークアドレスの取得. */
guiEgbPtr = MMI_GetEgbPtr() ;
/* ユーザアイコン設定 */
extern unsigned char *iconTbl[];
extern int iconMaxId;
MMI_SetIconTable(iconTbl, iconMaxId);
/* ハイパ型部品の初期化 */
if ((ret = MMI_initHyper()) < 0)
return ret ;
/* ダイアログ型部品の初期化 */
if ((ret = MMI_initDialogL40()) < 0)
return ret ;
/* ボタン型部品の初期化 */
if ((ret = MMI_initButtonL40()) < 0)
return ret ;
/* アイコンボタン型部品の初期化 */
if ((ret = MMI_initIconL40()) < 0)
return ret ;
/* 背景データの初期化 */
/* データの登録 */
if ((ret = MMI_Init(&initDataGUI)) < 0)
return ret ;
// Tmenuにパレットを合わせる
KH_initGuiColor();
ICNInit(0);
/* 背景を表示する */
MMI_SendMessage(MMI_GetBaseObj(), MM_SHOW, 0) ;
MMI_SendMessage(MMI_GetBaseObj(), MM_SETEXEC, 1, userFunc);
MMI_CallMessage(MMI_GetApliId(), GM_TITLE, (int)"DIGITAL By 機拡", 0);
extern void userIdleTask();
MMI_SetIdleTaskFunc( userIdleTask );
userIdleTask();
return NOERR ;
}
void userIdleTask(void)
{
static unsigned int oldHour = 25;
static unsigned int oldMinute = 61;
static unsigned int oldSecond = 61;
static unsigned int pflag = 0;
time_t ct = time(NULL);
struct tm *lt = localtime(&ct);
// まだ一秒経っていないなら終了
if ( lt->tm_sec == oldSecond ){
return;
}
oldSecond = lt->tm_sec;
pflag = 1 - pflag;
MMI_SendMessage(numberIconID[4],MM_SETSHAPE,1,523+pflag);
MMI_SendMessage(numberIconID[4],MM_SHOW,0);
// まだ一分経っていないなら終了
if ( lt->tm_min == oldMinute ){
return;
}
oldMinute = lt->tm_min;
MMI_SendMessage(numberIconID[2],MM_SETSHAPE,1,513+(oldMinute/10));
MMI_SendMessage(numberIconID[3],MM_SETSHAPE,1,513+(oldMinute%10));
MMI_SendMessage(numberIconID[2],MM_SHOW,0);
MMI_SendMessage(numberIconID[3],MM_SHOW,0);
// まだ一時間経っていないなら終了
if ( lt->tm_hour == oldHour ){
return;
}
oldHour = lt->tm_hour;
MMI_SendMessage(numberIconID[0],MM_SETSHAPE,1,513+(oldHour/10));
MMI_SendMessage(numberIconID[1],MM_SETSHAPE,1,513+(oldHour%10));
MMI_SendMessage(numberIconID[0],MM_SHOW,0);
MMI_SendMessage(numberIconID[1],MM_SHOW,0);
return ;
}
/* initDataGUI:quitIconID:MJ_ICONL40の呼び出し関数 */
int quitFunc(kobj, messId, argc, pev, trigger)
int kobj ;
int messId ;
int argc ;
EVENT *pev ;
int trigger ;
{
MMI_SetHaltFlag(TRUE);
quitFuncRet = NOERR ;
return NOERR ;
}